package com.ms.qw.client.dto;

import com.ms.qw.enums.TipoAlimento;
import com.ms.qw.enums.TipoClaseRacion;
import com.ms.qw.util.NumberUtil;

import java.math.BigDecimal;

public class ReporteInstitucionalDTO {
    private String vDepartamento;
    private String vComite;
    private String cCodComite;
    private String vProvincia;
    private String vDistrito;
    private String cCodDistrito;
    private String vCodAlimentoQW;
    private Integer iCodAlimento;
    private Integer iTipoModelo;
    private Integer iCodTipoRacion;
    private String vAlimento;
    private String vColegio;
    private String cCodModular;
    private Integer tiUnidad;
    private Integer iCodColegio;
    private Integer nroRacion;
    private Integer iTipoNivel;
    private String tipoAlimento;
    private Integer iCodCatAlimento;
    private String vNivel;
    private Integer totalAlumnos;
    private Integer totalRaciones;
    private String totalRacionesLabel;
    private String vPreparacion;
    private String vUnidad;
    private String cAgrupado;
    private String key;
    private BigDecimal volumen;
    private BigDecimal volumen_8;
    private BigDecimal volumen_9;
    private BigDecimal volumen_10;
    private BigDecimal volumen_11;
    private BigDecimal volumen_12;
    private BigDecimal volumenTotalRaciones;
    private BigDecimal volumenTotalAlejados;
    private BigDecimal volumenTotalProductos;
    private BigDecimal volumenTotalCanasta;
    private BigDecimal volumenTotal;

    public String getKey() {
        return getcCodDistrito()+"-"+getcAgrupado();
    }

    public void setKey(String key) {
        this.key = key;
    }

    private BigDecimal calcular(BigDecimal volumenInicial) {
        return (volumenInicial.divide(new BigDecimal(1000)));
//        return new BigDecimal(NumberUtil.getRedondeoEspecial((volumenInicial.divide(new BigDecimal(1000))).doubleValue()));
    }


    public BigDecimal getVolumen() {
        return getVolumen_8().add(getVolumen_9()).add(getVolumen_10()).add(getVolumen_11()).add(getVolumen_12());
    }

    public BigDecimal getVolumen_8() {
        return calcular(volumen_8);
    }

    public BigDecimal getVolumen_9() {
        return calcular(volumen_9);
    }

    public BigDecimal getVolumen_10() {
        return calcular(volumen_10);
    }

    public BigDecimal getVolumen_11() {
        return calcular(volumen_11);
    }

    public BigDecimal getVolumen_12() {

        BigDecimal result = calcular(volumen_12);
//        System.out.println("montoTotal "+volumen_12 +" convertido "+result);
        return result;
    }

    public String getvDepartamento() {
        return vDepartamento;
    }

    public void setvDepartamento(String vDepartamento) {
        this.vDepartamento = vDepartamento;
    }

    public String getvComite() {
        return vComite;
    }

    public void setvComite(String vComite) {
        this.vComite = vComite;
    }

    public String getvProvincia() {
        return vProvincia;
    }

    public void setvProvincia(String vProvincia) {
        this.vProvincia = vProvincia;
    }

    public String getvDistrito() {
        return vDistrito;
    }

    public void setvDistrito(String vDistrito) {
        this.vDistrito = vDistrito;
    }

    public String getcCodDistrito() {
        return cCodDistrito;
    }

    public void setcCodDistrito(String cCodDistrito) {
        this.cCodDistrito = cCodDistrito;
    }

    public Integer getiCodAlimento() {
        return iCodAlimento;
    }

    public void setiCodAlimento(Integer iCodAlimento) {
        this.iCodAlimento = iCodAlimento;
    }

    public Integer getTiUnidad() {
        return tiUnidad;
    }

    public String getvAlimento() {
        return vAlimento;
    }

    public void setvAlimento(String vAlimento) {
        this.vAlimento = vAlimento;
    }

    public String getvUnidad() {
        if (tiUnidad == 1) {
            return "Kilos";
        } else if (tiUnidad == 2) {
            return "Litros";
        } else if (tiUnidad == 3) {
            return "Litros";
        }
        return "Desconocido";
    }

    public void setvUnidad(String vUnidad) {
        this.vUnidad = vUnidad;
    }

    public void setTotalAlumnos(Integer totalAlumnos) {
        this.totalAlumnos = totalAlumnos;
    }

    public Integer getTotalRaciones() {
        return totalRaciones;
    }

    public void setTotalRaciones(Integer totalRaciones) {
        this.totalRaciones = totalRaciones;
    }

    public String getcCodModular() {
        return cCodModular;
    }

    public void setcCodModular(String cCodModular) {
        this.cCodModular = cCodModular;
    }

    public void setTiUnidad(Integer tiUnidad) {
        this.tiUnidad = tiUnidad;
    }

    public void setVolumen_8(BigDecimal volumen_8) {
        this.volumen_8 = volumen_8;
    }

    public void setVolumen_9(BigDecimal volumen_9) {
        this.volumen_9 = volumen_9;
    }

    public void setVolumen_10(BigDecimal volumen_10) {
        this.volumen_10 = volumen_10;
    }

    public void setVolumen_11(BigDecimal volumen_11) {
        this.volumen_11 = volumen_11;
    }

    public void setVolumen_12(BigDecimal volumen_12) {
        this.volumen_12 = volumen_12;
    }

    public String getvColegio() {
        return vColegio;
    }

    public void setvColegio(String vColegio) {
        this.vColegio = vColegio;
    }

    public Integer getNroRacion() {
        return nroRacion;
    }

    public void setNroRacion(Integer nroRacion) {
        this.nroRacion = nroRacion;
    }

    public Integer getiTipoNivel() {
        return iTipoNivel;
    }

    public void setiTipoNivel(Integer iTipoNivel) {
        this.iTipoNivel = iTipoNivel;
    }

    public String getvNivel() {
        if (iTipoNivel == 1) return "INICIAL";
        if (iTipoNivel == 2) return "PRIMARIA";
        return "";
    }

    public void setvNivel(String vNivel) {
        this.vNivel = vNivel;
    }



    public Integer getiCodColegio() {
        return iCodColegio;
    }

    public void setiCodColegio(Integer iCodColegio) {
        this.iCodColegio = iCodColegio;
    }

    @Override
    public String toString() {
        return "ReporteInstitucionalDTO{" +
                "vDepartamento='" + vDepartamento + '\'' +
                ", vProvincia='" + vProvincia + '\'' +
                ", vDistrito='" + vDistrito + '\'' +
                ", cCodDistrito='" + cCodDistrito + '\'' +
                ", cCodModular='" + cCodModular + '\'' +
                ", vColegio='" + vColegio + '\'' +
                ", totalRaciones=" + totalRaciones +
                ", totalAlumnos=" + totalAlumnos +
                ", vNivel='" + vNivel + '\'' +
                ", vAlimento='" + vAlimento + '\'' +
                ", iCodAlimento=" + iCodAlimento +
                ", vUnidad='" + vUnidad + '\'' +
                ", volumen_8=" + volumen_8 +
                ", volumen_9=" + volumen_9 +
                ", volumen_10=" + volumen_10 +
                ", volumen_11=" + volumen_11 +
                ", volumen_12=" + volumen_12 +
                '}';
    }

    public Integer getiCodTipoRacion() {
        return iCodTipoRacion;
    }

    public void setiCodTipoRacion(Integer iCodTipoRacion) {
        this.iCodTipoRacion = iCodTipoRacion;
    }


    public String getvPreparacion() {
        return vPreparacion;
    }

    public void setvPreparacion(String vPreparacion) {
        this.vPreparacion = vPreparacion;
    }

    public String getTotalRacionesLabel() {
        return totalRacionesLabel;
    }

    public void setTotalRacionesLabel(String totalRacionesLabel) {
        this.totalRacionesLabel = totalRacionesLabel;
    }

    public String getTipoModeloLabel(){
        return TipoClaseRacion.findByCode(iTipoModelo).getAliasReporte();
    }


    private Integer iCodClaseRacion ;

    public Integer getiCodClaseRacion() {
        return iCodClaseRacion;
    }

    public void setiCodClaseRacion(Integer iCodClaseRacion) {
        this.iCodClaseRacion = iCodClaseRacion;
    }

    public String getClaseRacion() {
        if(iCodClaseRacion==null) return null;
        if(iCodClaseRacion==1){
            return "RACION";
        }else if (iCodClaseRacion==2){
            return "PRODUCTO";
        }else if (iCodClaseRacion==3){
            return "PRODUCTO ALEJADO";
        }
        return "";
    }


    public Integer getiTipoModelo() {
        return iTipoModelo;
    }

    public void setiTipoModelo(Integer iTipoModelo) {
        this.iTipoModelo = iTipoModelo;
    }

    public String getcAgrupado() {
        return cAgrupado;
    }

    public void setcAgrupado(String cAgrupado) {
        this.cAgrupado = cAgrupado;
    }

    public void setVolumen(BigDecimal volumen) {
        this.volumen = volumen;
    }

    public String getvCodAlimentoQW() {
        return vCodAlimentoQW;
    }

    public void setvCodAlimentoQW(String vCodAlimentoQW) {
        this.vCodAlimentoQW = vCodAlimentoQW;
    }

    private Integer totalInicial;
    private Integer totalPrimaria;
    private Integer totalColegios;

    private Integer totalAlumnosInicial;
    private Integer totalAlumnosPrimaria;

    public Integer getTotalInicial() {
        return totalInicial;
    }

    public void setTotalInicial(Integer totalInicial) {
        this.totalInicial = totalInicial;
    }

    public Integer getTotalPrimaria() {
        return totalPrimaria;
    }

    public void setTotalPrimaria(Integer totalPrimaria) {
        this.totalPrimaria = totalPrimaria;
    }

    public Integer getTotalColegios() {
        return totalInicial + totalPrimaria;
    }

    public Integer getTotalAlumnos() {
        if(totalAlumnos!=null) return totalAlumnos;
        return NumberUtil.nvlIsZero(totalAlumnosInicial) + NumberUtil.nvlIsZero(totalAlumnosPrimaria);
    }

    public void setTotalColegios(Integer totalColegios) {
        this.totalColegios = totalColegios;
    }

    public Integer getTotalAlumnosInicial() {
        return totalAlumnosInicial;
    }

    public void setTotalAlumnosInicial(Integer totalAlumnosInicial) {
        this.totalAlumnosInicial = totalAlumnosInicial;
    }

    public Integer getTotalAlumnosPrimaria() {
        return totalAlumnosPrimaria;
    }

    public void setTotalAlumnosPrimaria(Integer totalAlumnosPrimaria) {
        this.totalAlumnosPrimaria = totalAlumnosPrimaria;
    }

    public String getcCodComite() {
        return cCodComite;
    }

    public void setcCodComite(String cCodComite) {
        this.cCodComite = cCodComite;
    }

    public BigDecimal getVolumenTotalRaciones() {
        return volumenTotalRaciones;
    }

    public void setVolumenTotalRaciones(BigDecimal volumenTotalRaciones) {
        this.volumenTotalRaciones = volumenTotalRaciones;
    }

    public BigDecimal getVolumenTotalAlejados() {
        return volumenTotalAlejados;
    }

    public void setVolumenTotalAlejados(BigDecimal volumenTotalAlejados) {
        this.volumenTotalAlejados = volumenTotalAlejados;
    }

    public BigDecimal getVolumenTotalProductos() {
        return volumenTotalProductos;
    }

    public void setVolumenTotalProductos(BigDecimal volumenTotalProductos) {
        this.volumenTotalProductos = volumenTotalProductos;
    }

    public BigDecimal getVolumenTotalCanasta() {
        return volumenTotalCanasta;
    }

    public void setVolumenTotalCanasta(BigDecimal volumenTotalCanasta) {
        this.volumenTotalCanasta = volumenTotalCanasta;
    }

    public BigDecimal getVolumenTotal() {
        return NumberUtil.nvlIsZero(volumenTotalRaciones)
                .add(NumberUtil.nvlIsZero(volumenTotalProductos))
                .add(NumberUtil.nvlIsZero(volumenTotalAlejados))
                .add(NumberUtil.nvlIsZero(volumenTotalCanasta));
    }

    public void setVolumenTotal(BigDecimal volumenTotal) {
        this.volumenTotal = volumenTotal;
    }

    public String getTipoAlimento() {
        if(iCodCatAlimento!=null && iCodCatAlimento!=0){
            return TipoAlimento.findByCode(iCodCatAlimento).getNombre();
        }else{
            return "";
        }

    }

    public void setTipoAlimento(String tipoAlimento) {
        this.tipoAlimento = tipoAlimento;
    }

    public Integer getiCodCatAlimento() {
        return iCodCatAlimento;
    }

    public void setiCodCatAlimento(Integer iCodCatAlimento) {
        this.iCodCatAlimento = iCodCatAlimento;
    }
}
